﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SIIE_ERP.Codigo;

namespace SIIE_ERP.BaseDatos.CRM.Transacciones
{
    public class dbo_Trans_Actividad
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion

        #region Constructores

        public dbo_Trans_Actividad(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion

        #region INSERT

        public Respuesta Insert_Actividad(
            EstatusDocs_Id Estatus,
            string Nombre,
            string Descripcion,
            string Oportunidad,
            string TipoAct,
            string FechaActividad,
            string HoraInicio,
            string HoraFin,
            string Costo,
            string Moneda,
            string Campana
        )
        {
            try
            {
                string Query = @"INSERT INTO dbo_Trans_Actividad_Cab
                             (
                                Id_Actividad,
                                RFC,
                                Secuencia,
                                Estatus,
                                Nombre,
                                Descripcion,         
                                Id_Oportunidad,
                                Id_Tipo_Act,
                                Id_Moneda,
                                Id_Campana,
                                Fecha_Actividad,
                                HoraInicio,
                                HoraFin,
                                Costo,
                                Fecha_Alta,
                                Usuario_Alta,
                                Fecha_Mantto,
                                Usuario_Mantto
                             )
                             VALUES
                             (
                                IIF(DCount('*', 'dbo_Trans_Actividad_Cab') = 0, 1, DMax('Id_Actividad', 'dbo_Trans_Actividad_Cab') + 1),
                                '@@RFC',
                                IIF(DCount('*', 'dbo_Trans_Actividad_Cab', ""RFC = '@@RFC'"") = 0, 1, DMax('Id_Actividad', 'dbo_Trans_Actividad_Cab', ""RFC = '@@RFC'"") + 1),
                                    
                                @@Estatus,
                                '@@Nombre',                                
                                '@@Descripcion',                             
                                @@IdOportunidad,     
                                @@IdTipoAct,
                                @@IdMoneda,
                                @@IdCampana,
                                '@@FechaActividad',
                                '@@HoraInicio',
                                '@@HoraFin',
                                @@Costo,

                                NOW(),
                                '@@Usuario',
                                NOW(),
                                '@@Usuario'
                             )";

                Query = Query.Replace("@@RFC", this._RFC);

                Query = Query.Replace("@@Estatus", Estatus.GetHashCode().ToString());
                Query = Query.Replace("@@Nombre", Nombre.ToString());
                Query = Query.Replace("@@Descripcion", Descripcion.ToString());
                Query = Query.Replace("@@IdOportunidad", Oportunidad.ToString());
                Query = Query.Replace("@@IdTipoAct", TipoAct.ToString());
                Query = Query.Replace("@@FechaActividad", FechaActividad);
                Query = Query.Replace("@@HoraInicio", HoraInicio);
                Query = Query.Replace("@@HoraFin", HoraFin);
                Query = Query.Replace("@@Costo", Costo);
                Query = Query.Replace("@@IdMoneda", Moneda);
                Query = Query.Replace("@@IdCampana", Campana);

                Query = Query.Replace("@@Usuario", this._Usuario);

                return SrvDB.ExecuteQuery_Insert(Query);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region SELECT

        public DataTable Get_Report(int Id_Campana, int Id_Cliente, int Estatus, int Id_Oportunidad, int Id_Tipo_Act, int Tiempo)
        {
            string Query = @"

                SELECT        
	                act.Id_Actividad, 
	                act.RFC, 
	                act.Secuencia, 
	                act.Estatus, 
	                act.Nombre, 
	                act.Descripcion, 
	                act.Id_Cliente, 
	                act.Id_Campana, 
	                act.Id_Oportunidad, 
	                act.Id_Tipo_Act, 
	                act.Id_Moneda, 
	                act.Fecha_Actividad, 
	                act.HoraInicio, 
	                act.HoraFin, 
	                act.Costo, 
	                act.Fecha_Alta, 
	                act.Usuario_Alta, 
	                act.Fecha_Mantto, 
	                act.Usuario_Mantto, 

	
	                Switch(
		                dbo_Cat_Campana.Nombre IS NULL, 'Sin Campana',
		                true, dbo_Cat_Campana.Nombre
	                ) AS NombreCampana,
	
	                Switch(
		                dbo_Trans_Oportunidad_Cab.Id_Oportunidad IS NULL, 'Sin Oportunidad',
		                true, dbo_Trans_Oportunidad_Cab.Secuencia
	                ) AS NombrePedido,
	
	                Switch(
		                dbo_Cat_Tipo_Actividad.Nombre IS NULL, 'Sin Tipo de Actividad' ,
		                true, dbo_Cat_Tipo_Actividad.Nombre
	                ) AS NombreTipoActividad,
	
	                dbo_Cat_Moneda.Clave, 
	                dbo_Cat_Moneda.Simbolo, 
	                dbo_Cat_Moneda.Nombre AS Expr1, 
	                dbo_Cat_Estatus.Nombre AS NombreEstatus, 
	                Cli.Razon_Social

                FROM
	                ((((((dbo_Trans_Actividad_Cab AS act 
	                LEFT OUTER JOIN dbo_Cat_Cliente AS Cli ON Cli.Id_Cliente = act.Id_Cliente )
	                INNER JOIN dbo_Cat_Estatus ON act.Estatus = dbo_Cat_Estatus.Estatus )
	                INNER JOIN dbo_Cat_Moneda ON act.Id_Moneda = dbo_Cat_Moneda.Id_Moneda )
	                LEFT OUTER JOIN dbo_Trans_Oportunidad_Cab ON act.Id_Oportunidad = dbo_Trans_Oportunidad_Cab.Id_Oportunidad )
	                LEFT OUTER JOIN dbo_Cat_Tipo_Actividad ON act.Id_Tipo_Act = dbo_Cat_Tipo_Actividad.Id_TipoActividades )
	                LEFT OUTER JOIN dbo_Cat_Campana ON act.Id_Campana = dbo_Cat_Campana.Id_Campana )

                 WHERE 
                    
                        act.RFC = '@@RFC'
                    AND (@@Id_Campana = -1 OR act.Id_Campana = @@Id_Campana)
                    AND (@@Id_Cliente = -1 OR act.Id_Cliente = @@Id_Cliente)
                    AND (@@Id_Oportunidad = -1 OR act.Id_Campana = @@Id_Oportunidad)
                    AND (@@Id_Tipo_Act = -1 OR act.Id_Campana = @@Id_Tipo_Act)
                    AND (@@Estatus = -1 OR act.Estatus = @@Estatus)

                    AND 
					(
					(@@Tiempo = 1 and Year(act.Fecha_Actividad) = Year(NOW()) and Month(act.Fecha_Actividad) = Month(NOW())) or
					(@@Tiempo = 2 and Year(act.Fecha_Actividad) = Year(DateAdd('m',-1,NOW())) and Month(act.Fecha_Actividad) = Month(DateAdd('m',-1,NOW()))) or
					(@@Tiempo = 3 and Year(act.Fecha_Actividad) = Year(NOW())) or
					(@@Tiempo = 4 and Year(act.Fecha_Actividad) = Year(DateAdd('yyyy',-1,NOW()))) or
					(@@Tiempo = 5)
					)   
                    
            ";
            
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Tiempo", Tiempo.ToString());
            Query = Query.Replace("@@Estatus", Estatus.ToString());
            Query = Query.Replace("@@Id_Tipo_Act", Id_Tipo_Act.ToString());
            Query = Query.Replace("@@Id_Oportunidad", Id_Oportunidad.ToString());
            Query = Query.Replace("@@Id_Cliente", Id_Cliente.ToString());
            Query = Query.Replace("@@Id_Campana", Id_Campana.ToString());
            
            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Actividades()
        {
            string Query = @"SELECT A1.* FROM (
                                dbo_Trans_Actividad_Cab as A1
                                    INNER JOIN dbo_Trans_Oportunidad_Cab as A2 ON A1.Id_Oportunidad = A2.Id_Oportunidad
                            )
                            WHERE A1.RFC = '@@RFC'";
            Query = Query.Replace("@@RFC", this._RFC);
            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Actividades_Por_Id(Int32 Id)
        {
            string Query = @"SELECT A1.* FROM (
                                dbo_Trans_Actividad_Cab as A1
                                    INNER JOIN dbo_Trans_Oportunidad_Cab as A2 ON A1.Id_Oportunidad = A2.Id_Oportunidad
                            )
                            WHERE A1.RFC = '@@RFC' AND A1.Id_Actividad = @@Id";
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id", Id.ToString());
            return SrvDB.ExecuteQuery_Get(Query);
        }

        #endregion

        #region UPDATE
        public Respuesta Update_Actividad(
          Int32 IdActividad,
          EstatusDocs_Id Estatus,
          string Nombre,
          string Descripcion,
          string Oportunidad,
          string TipoAct,
          string FechaActividad,
          string HoraInicio,
          string HoraFin,
          string Costo,
          string Moneda,
          string Campana
      )
        {
            try
            {
                string Query = @"UPDATE dbo_Trans_Actividad_Cab SET
                             
                                Estatus = @@Estatus,
                                Nombre = '@@Nombre',           
                                Descripcion = '@@Descripcion',       
                                Id_Oportunidad = @@IdOportunidad,   
                                Id_Tipo_Act = @@IdTipoAct,
                                Id_Moneda = @@IdMoneda,
                                Id_Campana = @@IdCampana,
                                Fecha_Actividad = '@@FechaActividad',
                                HoraInicio = '@@HoraInicio',
                                HoraFin = '@@HoraFin',
                                Costo = @@Costo,
                                
                                Fecha_Mantto = NOW(),
                                Usuario_Mantto = '@@Usuario'
                             
                             WHERE Id_Actividad = @@IdActividad";

                Query = Query.Replace("@@RFC", this._RFC);

                Query = Query.Replace("@@Estatus", Estatus.GetHashCode().ToString());
                Query = Query.Replace("@@Nombre", Nombre.ToString());
                Query = Query.Replace("@@Descripcion", Descripcion.ToString());
                Query = Query.Replace("@@IdOportunidad", Oportunidad.ToString());
                Query = Query.Replace("@@IdTipoAct", TipoAct.ToString());
                Query = Query.Replace("@@FechaActividad", FechaActividad);
                Query = Query.Replace("@@HoraInicio", HoraInicio);
                Query = Query.Replace("@@HoraFin", HoraFin);
                Query = Query.Replace("@@Costo", Costo);
                Query = Query.Replace("@@IdMoneda", Moneda);
                Query = Query.Replace("@@IdCampana", Campana);
                Query = Query.Replace("@@IdActividad", IdActividad.ToString());

                Query = Query.Replace("@@Usuario", this._Usuario);

                return SrvDB.ExecuteQuery_Insert(Query);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion
    }
}
